package com.linzm.leetcode.primary.exercises4_20230129;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @Author zimingl
 * @Date 2023/2/9 23:22
 * @Description: 拆分数位后四位数字的最小和
 * 给你一个四位 正 整数 num 。请你使用 num 中的 数位 ，将 num 拆成两个新的整数 new1 和 new2 。new1 和 new2 中可以有 前导 0 ，且 num 中 所有 数位都必须使用。
 * 比方说，给你 num = 2932 ，你拥有的数位包括：两个 2 ，一个 9 和一个 3 。一些可能的 [new1, new2] 数对为 [22, 93]，[23, 92]，[223, 9] 和 [2, 329] 。
 * 请你返回可以得到的 new1 和 new2 的 最小 和。
 * 输入：num = 2932
 * 输出：52
 * 解释：可行的 [new1, new2] 数对为 [29, 23] ，[223, 9] 等等。
 * 最小和为数对 [29, 23] 的和：29 + 23 = 52 。
 * <p>
 * 输入：num = 4009
 * 输出：13
 * 解释：可行的 [new1, new2] 数对为 [0, 49] ，[490, 0] 等等。
 * 最小和为数对 [4, 9] 的和：4 + 9 = 13 。
 * <p>
 * 1000 <= num <= 9999
 */
public class Demo17_2160 {
    public static void main(String[] args) {
        Demo17_2160 demo17_2160 = new Demo17_2160();
        int sum = demo17_2160.minimumSum(5592);
        System.out.println(sum);
    }
    public int minimumSum2(int num) {
        int a = num%10;
        int b = num/10%10;
        int c = num/100%10;
        int d = num/1000;
        int[] res = new int[]{a,b,c,d};
        Arrays.sort(res);
        int ans = 0;
        return res[0]*10+res[1]*10+res[2]+res[3];
    }

    public int minimumSum(int num) {
        String numStr = String.valueOf(num);
        List<Integer> set = new ArrayList<>();
        int count = 0;
        for (int i = 0; i < numStr.length(); i++) {
            if (numStr.charAt(i) - '0' == 0) {
                count++;
            }
            set.add(numStr.charAt(i) - '0');
        }
        Collections.sort(set);
        // 1234
        if (set.size() == 4 && count == 0) {
            int[] ints = set.stream().mapToInt(x -> x).toArray();
            String str1 = ints[0] + "" + ints[2];
            String str2 = ints[1] + "" + ints[3];
            return Integer.parseInt(str1) + Integer.parseInt(str2);
        }
        // 1230 12 + 3
        if (set.size() == 4 && count == 1) {
            int[] ints = set.stream().mapToInt(x -> x).toArray();
            String str1 = ints[1] + "" + ints[2];
            return Integer.parseInt(str1) + ints[3];
        }
        set.removeIf(x -> x == 0);
        if (set.size() == 3) {
            int[] ints = set.stream().mapToInt(x -> x).toArray();
            String str1 = ints[0] + "" + ints[1];
            String str2 = ints[0] + "" + ints[2];
            return Integer.parseInt(str1) + Integer.parseInt(str2);
        }
        if (set.size() == 2) {
            int[] ints = set.stream().mapToInt(x -> x).toArray();
            return ints[0] + ints[1];
        }
        if (set.size() == 1) {
            int[] ints = set.stream().mapToInt(x -> x).toArray();
            return ints[0];
        }
        return 0;
    }
}
